home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / Talking KeyBoard / Source / DeferredTask.c < prev    next >
Encoding:
Text File  |  1998-06-17  |  2.3 KB  |  93 lines  |  [TEXT/CWIE]

  1. // Program Author: Paul Baxter
  2. //    pbaxter@assistivetech.com
  3. //
  4. //
  5. #include "DeferredTask.h"
  6. #include "speech.h"
  7.  
  8. #if !GENERATINGCFM
  9. void MyTask(long dtParam :__A1);
  10. #else
  11. void MyTask(long dtParam);
  12. #endif
  13.  
  14. DeferredTask* gDTRecPtr;
  15.  
  16. DeferredTaskUPP gDeferreredTask = nil;
  17. long gDTParam = nil;
  18.  
  19.  
  20.  
  21. // * ****************************************************************************** *
  22. // *    InitDeferredTask
  23. // *                            Init DefferedTaskRecord
  24. // * ****************************************************************************** *
  25. OSErr InitDeferredTask(void)
  26. {
  27.     THz theZone;
  28.  
  29.     theZone = GetZone();
  30.     SetZone(SystemZone());
  31.     if (!gDeferreredTask) {
  32.         gDeferreredTask = NewDeferredTaskProc(MyTask);
  33. #if !GENERATINGCFM
  34.         gDTParam = SetCurrentA5();
  35. #endif
  36.         gDTRecPtr = (DeferredTask*)NewPtrSysClear(sizeof(DeferredTask));
  37.         gDTRecPtr->qType = dtQType;
  38.         gDTRecPtr->dtAddr = gDeferreredTask;
  39.         gDTRecPtr->dtParam = gDTParam;
  40.     }
  41.     SetZone(theZone);
  42.     return noErr;
  43. }
  44.  
  45. // * ****************************************************************************** *
  46. // *    RemoveDTask
  47. // *                            DisposeMemory used by gDTRecPtr
  48. // * ****************************************************************************** *
  49. void RemoveDTask(void)
  50. {
  51.     if (gDTRecPtr)
  52.         DisposePtr((Ptr)gDTRecPtr);
  53.         
  54.     if (gDeferreredTask)
  55.         DisposeRoutineDescriptor(gDeferreredTask);
  56. }
  57.  
  58. // * ****************************************************************************** *
  59. // *    InstallDeferredTask
  60. // *                            Install our Task
  61. // * ****************************************************************************** *
  62. void InstallDeferredTask(void)
  63. {
  64.     if (gDTRecPtr)
  65.         DTInstall(gDTRecPtr);
  66. }
  67.  
  68. // * ****************************************************************************** *
  69. // *    MyTask
  70. // *                            The actual task 68K
  71. // * ****************************************************************************** *
  72. #if !GENERATINGCFM
  73. void MyTask(long dtParam :__A1)
  74. {
  75.     long oldA5;
  76.  
  77.     oldA5 = SetA5(dtParam);
  78.  
  79.     SpeakBuffers();    // This is NOT safe and MAY EVEN CRASH but this is MacHack!
  80.     SetA5(oldA5);
  81. }
  82. #else
  83. // * ****************************************************************************** *
  84. // *    MyTask
  85. // *                            The actual task PPC
  86. // * ****************************************************************************** *
  87. void MyTask(long dtParam)
  88. {
  89. #pragma unused(dtParam)
  90.     SpeakBuffers();    // This is NOT safe and MAY EVEN CRASH but this is MacHack!
  91. }
  92.  
  93. #endif